package jp.business.utils.util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * 反射判断对象属性是否为空工具类
 *
 * @author 云野
 */
public class ParamCheck {
  /**
   * @param: obj:指定对象
   * @param: params:指定属性集
   * @description: 校验指定参数不能为空
   * @return: java.lang.Boolean
   * @author: Jp
   * @date: 2021/12/22
   */
  public static Boolean checkParamsIgnoreSomeNotNull(Object obj, String... params) {

    boolean paramsBoolean = true;

    Field[] declaredFields = obj.getClass().getDeclaredFields();

    // 需要校验的字段
    List<Field> arrList = new ArrayList<>();

    // 先获取需要校验的属性，存入List
    for (String param : params) {
      for (Field declaredField : declaredFields) {
        if (declaredField.getName().equals(param)) {
          arrList.add(declaredField);
          break;
        }
      }
    }

    // 校验指定的属性是否为空
    try {
      for (Field field : arrList) {
        for (Field f : declaredFields) {
          if (field.getName().equals(f.getName())) {
            f.setAccessible(true);
            if (f.get(obj) == null || "".equals(f.get(obj))) {
              paramsBoolean = false;
              break;
            }
            break;
          }
        }
      }
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    }
    return paramsBoolean;
  }
}
